package lin

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"strings"
)

type W网络请求_键值列表 struct {
	附加协议头         map[string]string
	F返回协议头   http.Header //可以直接用 . 路径取值
	F返回cook string
	F返回状态码   int
	F返回数据     []byte
}

func (类 *W网络请求_键值列表) 初始化() {
	if 类.附加协议头 == nil {
		类.附加协议头 = make(map[string]string)
	}
}

func (类 *W网络请求_键值列表) Z置附加协议头(协议头表 J键值表) {
	类.初始化()
	表:=协议头表.D到map()
	for J, v := range 表 {
		类.附加协议头[J] = fmt.Sprintf("%v", v)
	}
}
func (类 *W网络请求_键值列表) QK清空(cookies ...string) {
	类.初始化()
	类.附加协议头 = make(map[string]string)
	类.F返回cook = ""
	类.F返回数据 = make([]byte, 0)
}

func (类 *W网络请求_键值列表) Z置cookies(cookies ...string) {
	类.初始化()
	类.附加协议头["cookie"] = strings.Join(cookies, ";")
}

func (类 *W网络请求_键值列表) Post(网址 string, 提交数据 string) (返回_错误 error) {
	client := &http.Client{}
	req, _ := http.NewRequest("POST", 网址, strings.NewReader(提交数据))
	if len(类.附加协议头) > 0 {
		for k, v := range 类.附加协议头 {
			req.Header.Add(k, v)
		}
	}
	resp, err := client.Do(req)
	if err != nil {
		返回_错误 = err
		//resp.Body.Close()
		return
	}
	defer resp.Body.Close()
	body, err := io.ReadAll(resp.Body)
	类.F返回数据 = body
	if err != nil {
		返回_错误 = err
		return
	}
	类.F返回协议头 = resp.Header
	类.F返回状态码 = resp.StatusCode
	返回_cookes := resp.Cookies()
	//网络请求.Fh_cook

	协议头组 := make([]string, len(返回_cookes))
	for i, v := range 返回_cookes {
		协议头组[i] = v.Name + "=" + v.Value
	}
	类.F返回cook = strings.Join(协议头组, ";")
	return
}
func (类 *W网络请求_键值列表) F返回数据_到键值表() (返回_键值表 J键值表, 返回_错误 error) {
	map表 := make(map[string]any)
	返回_错误 = json.Unmarshal(类.F返回数据, &map表)
	if 返回_错误 != nil {
		return
	}
	返回_键值表.ZR载入(map表)
	return
}

func (类 *W网络请求_键值列表) F返回数据_到列表() (返回_列表 L列表, 返回_错误 error) {
	切片 := make([]any, 0)
	返回_错误 = json.Unmarshal(类.F返回数据, &切片)
	if 返回_错误 != nil {
		return
	}
	返回_列表.ZR载入(切片)
	return
}
func (类 *W网络请求_键值列表) F返回数据_到文本() (返回_值 string) {
	返回_值 = string(类.F返回数据)
	return
}

func (类 *W网络请求_键值列表) Get(网址 string, 提交数据 ...string) (返回_错误 error) {
	client := &http.Client{}
	请求网址 := 网址
	if len(提交数据) > 0 && 提交数据[0] != "" {
		if strings.HasSuffix(请求网址, "?") {
			请求网址 = 请求网址 + 提交数据[0]
		} else {
			请求网址 = 请求网址 + "?" + 提交数据[0]
		}

	}
	req, _ := http.NewRequest("GET", 请求网址, nil)
	if len(类.附加协议头) > 0 {
		for k, v := range 类.附加协议头 {
			req.Header.Add(k, v)
		}
	}
	resp, err := client.Do(req)
	if err != nil {
		返回_错误 = err
		//resp.Body.Close()
		return
	}
	defer resp.Body.Close()
	body, err := io.ReadAll(resp.Body)
	类.F返回数据 = body
	if err != nil {
		返回_错误 = err
		return
	}

	类.F返回协议头 = resp.Header
	类.F返回状态码 = resp.StatusCode
	类.F返回状态码 = resp.StatusCode
	返回_cookes := resp.Cookies()
	协议头组 := make([]string, len(返回_cookes))
	for i, v := range 返回_cookes {
		协议头组[i] = v.Name + "=" + v.Value
	}
	类.F返回cook = strings.Join(协议头组, ";")
	return
}
